﻿// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// Copyright (c) 2011, Dr. Masroor Ehsan
// All rights reserved.
// 
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of the author nor the
//       names of its contributors may be used to endorse or promote products
//       derived from this software without specific prior written permission.
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

using System;

namespace dseScraper
{
    public class StockQuote
    {
        public DateTime DateTime { get; set; }

        public string Symbol { get; set; }

        public decimal Ltp { get; set; }

        public decimal High { get; set; }

        public decimal Low { get; set; }

        public decimal Open { get; set; }

        public decimal Close { get; set; }

        public decimal PrevClose { get; set; }

        public decimal Change { get; set; }

        public float ChangePct { get; set; }

        public int Trades { get; set; }

        public int Volume { get; set; }

        public void SetData(StockQuoteField quoteField, string rawData)
        {
            rawData = rawData.Trim();

            switch (quoteField)
            {
                case StockQuoteField.Symbol:
                    Symbol = rawData.ToUpper();
                    break;
                case StockQuoteField.Open:
                    Open = rawData.StringToDecimal();
                    break;
                case StockQuoteField.Close:
                    Close = rawData.StringToDecimal();
                    break;
                case StockQuoteField.High:
                    High = rawData.StringToDecimal();
                    break;
                case StockQuoteField.Low:
                    Low = rawData.StringToDecimal();
                    break;
                case StockQuoteField.PrevClose:
                    PrevClose = rawData.StringToDecimal();
                    break;
                case StockQuoteField.Ltp:
                    Ltp = rawData.StringToDecimal();
                    break;
                case StockQuoteField.Change:
                    Change = rawData.StringToDecimal();
                    break;
                case StockQuoteField.ChangePct:
                    ChangePct = rawData.StringToFloat();
                    break;
                case StockQuoteField.Trades:
                    Trades = rawData.StringToInt();
                    break;
                case StockQuoteField.Volume:
                    Volume = rawData.StringToInt();
                    break;
                case StockQuoteField.Value:
                    break;
            }
        }

        public override string ToString()
        {
            return string.Format(@"{0},{1:yyyy-MM-dd},{1:hh:mm:ss},{2},{3},{4},{5},{6},{7},{8},{9}", 
                                   Symbol, DateTime, Ltp, High, Low, Close, 
                                   PrevClose,Change, Trades, Volume);
        }
    }
}